home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / c_math.arc / GCD.C < prev    next >
Encoding:
C/C++ Source or Header  |  1983-07-02  |  1.3 KB  |  53 lines

  1.  
  2. #include <mp.h>
  3. gcd(a,b,c) MINT *a,*b,*c;
  4. {       MINT x,y,z,w;
  5.         x.len=y.len=z.len=w.len=0;
  6.         move(a,&x);
  7.         move(b,&y);
  8.         while(y.len!=0)
  9.         {       mdiv(&x,&y,&w,&z);
  10.                 move(&y,&x);
  11.                 move(&z,&y);
  12.         }
  13.         move(&x,c);
  14.         xfree(&x);
  15.         xfree(&y);
  16.         xfree(&z);
  17.         xfree(&w);
  18.         return;
  19. }
  20. invert(a, b, c) MINT *a, *b, *c;
  21. {       MINT x, y, z, w, Anew, Aold;
  22.         int i = 0;
  23.         x.len = y.len = z.len = w.len = Aold.len = 0;
  24.         Anew.len = 1;
  25.         Anew.val = xalloc(1);
  26.         *Anew.val = 1;
  27.         move(b, &x);
  28.         move(a, &y);
  29.         while(y.len != 0)
  30.         {       mdiv(&x, &y, &w, &z);
  31.                 move(&Anew, &x);
  32.                 mult(&w, &Anew, &Anew);
  33.                 madd(&Anew, &Aold, &Anew);
  34.                 move(&x, &Aold);
  35.                 move(&y, &x);
  36.                 move(&z, &y);
  37.                 i++;
  38.         }
  39.         move(&Aold, c);
  40.         if( (i&01) == 0) msub(b, c, c);
  41.         xfree(&x);
  42.         xfree(&y);
  43.         xfree(&z);
  44.         xfree(&w);
  45.         xfree(&Aold);
  46.         xfree(&Anew);
  47. }
  48. 63%   xfree(&x);
  49.         xfree(&y);
  50.         xfree(&z);
  51.         xfree(&w);
  52.         xfree(&Aold);
  53.